package com.xbongbong.paas.service;

import com.xbongbong.paas.domain.entity.PaasProcessDataEntity;
import com.xbongbong.paas.pojo.ProcessNodeAllReadDTO;
import com.xbongbong.paas.pojo.dto.PaasBatchPrintByProcessDTO;
import com.xbongbong.paas.pojo.dto.ProcessNodeItemDTO;
import com.xbongbong.paas.pojo.dto.ProcessNodeTaskAddBatchDTO;
import com.xbongbong.paas.pojo.dto.ProcessNodeTaskCountDTO;
import com.xbongbong.paas.pojo.dto.ProcessNodeTaskGetDTO;
import com.xbongbong.paas.pojo.dto.ProcessNodeTaskListDTO;
import com.xbongbong.paas.pojo.dto.ProcessNodeTaskReadDTO;
import com.xbongbong.paas.pojo.dto.ProcessNodeTaskUpdateDTO;
import com.xbongbong.paas.pojo.dto.ProcessTaskDelDTO;
import com.xbongbong.paas.pojo.vo.PaasBatchPrintByProcessVO;
import com.xbongbong.paas.pojo.vo.ProcessNextNodeTaskGetVO;
import com.xbongbong.paas.pojo.vo.ProcessNodeTaskCountVO;
import com.xbongbong.paas.pojo.vo.ProcessNodeTaskGet4IndexVO;
import com.xbongbong.paas.pojo.vo.ProcessNodeTaskGetVO;
import com.xbongbong.paas.pojo.vo.ProcessNodeTaskListVO;
import com.xbongbong.paas.pojo.vo.ProcessNodeTaskRecordsVO;
import com.xbongbong.paas.pojo.vo.ProcessNodeTaskShowVO;
import com.xbongbong.paas.pojo.vo.ProcessNodeTaskUpdateVO;
import com.xbongbong.paas.pojo.vo.SummaryDataVO;
import com.xbongbong.paas.toolbox.exception.XbbException;
import com.xbongbong.paas.toolbox.wrap.BaseVO;


/**
 * @author: wufeng
 * @date: 2018/8/22 15:56
 * @desrcption: 流程节点任务
 */
public interface PaasProcessNodeTaskService {

    /**
     * 流程操作：打回，转交，激活，结束操作、撤回、重新提交
     * @param processNodeTaskUpdateDTO
     * @return
     * @throws XbbException
     */
    ProcessNodeTaskUpdateVO update(ProcessNodeTaskUpdateDTO processNodeTaskUpdateDTO) throws XbbException;

    /**
     * Description: 获取全部工作流列表
     * @param processNodeTaskListDTO processNodeTaskListDTO
     * @return com.xbongbong.paas.pojo.dto.ProcessNodeTaskListDTO
     * @throws XbbException XbbException
     */
    ProcessNodeTaskListVO allList(ProcessNodeTaskListDTO processNodeTaskListDTO) throws XbbException;

    /**
     * 流程详情，包含流程权限操作,以及表单数据、评论
     * @param processNodeTaskGetDTO
     * @return
     * @throws XbbException
     */
    ProcessNodeTaskGetVO detail(ProcessNodeTaskGetDTO processNodeTaskGetDTO) throws XbbException;


    /**
     * 查重流程审批数据渲染
     * @param processNodeTaskGetDTO
     * @return
     * @throws XbbException
     */
    ProcessNodeTaskGetVO duplicateApprovalDetail(ProcessNodeTaskGetDTO processNodeTaskGetDTO, PaasProcessDataEntity partPaasProcessDate) throws XbbException;

    /**
     * 我提交的
     * @param processNodeTaskListDTO
     * @return
     * @throws XbbException
     */
    ProcessNodeTaskListVO createList(ProcessNodeTaskListDTO processNodeTaskListDTO) throws XbbException;

    /**
     * 提交给我的
     * @param processNodeTaskListDTO
     * @return ProcessNodeTaskListVO
     * @throws XbbException
     */
    ProcessNodeTaskListVO todoList(ProcessNodeTaskListDTO processNodeTaskListDTO) throws XbbException;

    /**
     * 抄送给我的
     * @param processNodeTaskListDTO
     * @return ProcessNodeTaskListVO
     * @throws XbbException
     */
    ProcessNodeTaskListVO ccList(ProcessNodeTaskListDTO processNodeTaskListDTO) throws XbbException;

    /**
     * 审批记录和抄送人列表
     * @param processNodeTaskGetDTO
     * @return
     * @throws XbbException
     */
    ProcessNodeTaskRecordsVO records(ProcessNodeTaskGetDTO processNodeTaskGetDTO) throws XbbException;


    /**
     * 获取流程列表中单个节点的摘要信息
     *
     * @param processNodeItemDTO
     * @return
     */
    SummaryDataVO summaryItem(ProcessNodeItemDTO processNodeItemDTO) throws XbbException;

    /**
     * 合计流程任务数量
     * @param processNodeTaskCountDTO
     * @return
     * @throws XbbException
     */
    ProcessNodeTaskCountVO count(ProcessNodeTaskCountDTO processNodeTaskCountDTO) throws XbbException;
    /**
     * 合计流程任务展示
     * @param processNodeTaskCountDTO
     * @return
     * @throws XbbException
     */
    ProcessNodeTaskShowVO show(ProcessNodeTaskCountDTO processNodeTaskCountDTO) throws XbbException;

    /**
     * 已读未读
     * @param processNodeTaskReadDTO
     * @return
     * @throws XbbException
     */
    BaseVO readNode(ProcessNodeTaskReadDTO processNodeTaskReadDTO) throws XbbException;

    /**
     * 删除任务
     * @param processTaskDelDTO
     * @return
     * @throws XbbException
     */
    BaseVO delTask(ProcessTaskDelDTO processTaskDelDTO) throws XbbException;

    /**
     * 管理员转交处理
     * @param processNodeTaskUpdateDTO
     * @return
     * @throws XbbException
     */
    ProcessNodeTaskUpdateVO adminTransfer(ProcessNodeTaskUpdateDTO processNodeTaskUpdateDTO) throws XbbException;

    /**
     * 获取审批批量打印
     * 
     * @param paasPrintDatasByProcessDTO
     * @throws XbbException
     * @return
     * @author: hongxiao
     * @date: 2020-02-07 16:41
     * @since: v4.13.0
     * @version: v4.13.0
     */
    PaasBatchPrintByProcessVO getBatchPrintByProcess(PaasBatchPrintByProcessDTO paasPrintDatasByProcessDTO) throws XbbException;

    /**
     * 审批抄送消息一键已读
     * @param processNodeAllReadDTO
     * @return
     * @throws XbbException
     */
    BaseVO readAllCcList(ProcessNodeAllReadDTO processNodeAllReadDTO) throws XbbException;

    /**
     * 流程详情，包含流程权限操作,以及表单数据、评论
     * @param processNodeTaskGetDTO
     * @return
     * @throws XbbException
     */
    ProcessNodeTaskGet4IndexVO detail4Index(ProcessNodeTaskGetDTO processNodeTaskGetDTO) throws XbbException;

    /**
     * 获取下一个节点的信息
     *
     * @param taskGetDto 当前节点的信息
     * @return 下一个节点的信息
     * @throws XbbException 异常
     */
    ProcessNextNodeTaskGetVO nextNode(ProcessNodeTaskGetDTO taskGetDto) throws XbbException;
}
